package tpgrandt.control;

import java.util.logging.Level;
import java.util.logging.Logger;
import tpgrandt.dao.FechaDAO;
import tpgrandt.dao.GeneralDAO;
import tpgrandt.excepciones.CerrarFechaException;
import tpgrandt.excepciones.EquipoFantasiaExistenteException;
import tpgrandt.varios.*;

/**
 * @version 1.0
 * @created 19-Jan-2010 18:07:42
 */
public class GestionFecha {

	private Fecha fecha;
        private Integer tipo;
        private Integer documento;

	public GestionFecha(Fecha fecha, Integer tipo, Integer doc){
            this.fecha = fecha;
            this.tipo = tipo;
            this.documento = doc;
	}

	/**
	 * 
	 * @param fecha
	 */
	public GestionFecha(Fecha fecha){

	}

    public Fecha getFecha() {
        return fecha;
    }

	/**
	 * 
	 * @param tipo
	 * @param documento
	 */
	public boolean cerrar() throws CerrarFechaException{
	    if (!fecha.verificarCierre())
		throw new CerrarFechaException();

            Auditoria.auditarCierreFecha(tipo, documento);
	    calcularPuntos();

	    Auditoria.auditarCierreFecha(tipo, documento);

	    return true;
	}

	private void calcularPuntos() {
	    Participante users[] = GeneralDAO.listarParticipantes();

	    for (int u = 0; u < users.length; u++) {
		Integrante integ[] = new Integrante[16];
		if (users[u].getEquipo_fantasia().ultimoPlantel().getFecha() != FechaDAO.fechaActual()) {
		    users[u].getEquipo_fantasia().agregarNuevoPlantel();
		    try {
			GeneralDAO.guardarUltimoPlantel(users[u], GestionEquipo.MODIFICAR_EQUIPO);
		    } catch (EquipoFantasiaExistenteException ex) {
			Logger.getLogger(GestionFecha.class.getName()).log(Level.SEVERE, null, ex);
		    }
		    users = GeneralDAO.listarParticipantes();
		}
		integ = users[u].getEquipo_fantasia().ultimoPlantel().getIntegrantes();
		int puntos = 0;
		int max = -10;
                int cot = PlantelFecha.cotizacion_max;
		int pos = 1;
                int arq = 0;
                int def = 0;
                int vol = 0;
                int del = 0;
		for (int i = 1; i < 16; i++) {
                    int puntos_actual = integ[i].getPuntos() != null ? integ[i].getPuntos() : -10;
                    int cot_actual = integ[i].getJugador1ra().getCotizacion();

                    switch (integ[i].getJugador1ra().getPuesto()) {
                        case Jugador.ARQUERO:
                            if (arq < 1 && integ[i].participa()) {
                                arq++;
                                puntos += puntos_actual;
                            }
                            break;
                        case Jugador.DEFENSOR:
                            if (def < 4 && integ[i].participa()) {
                                def++;
                                puntos += puntos_actual;
                            }
                            break;
                        case Jugador.VOLANTE:
                            if (vol < 3 && integ[i].participa()) {
                                vol++;
                                puntos += puntos_actual;
                            }
                            break;
                        case Jugador.DELANTERO:
                            if (del < 3 && integ[i].participa()) {
                                del++;
                                puntos += puntos_actual;
                            }
                            break;
                    }
                    if (integ[i].participa())
                        if (puntos_actual > max) {
                            pos = i;
                            max = puntos_actual;
                            cot = cot_actual;
                        }
                        else if(puntos_actual == max) {
                            pos = (cot_actual < cot) ? i : pos;
                            max = puntos_actual;
                            cot = cot_actual;
                        }
		}
		users[u].getEquipo_fantasia().ultimoPlantel().setPuntos(puntos);
		users[u].getEquipo_fantasia().ultimoPlantel().setJugador_estrella(pos);
		users[u].getEquipo_fantasia().setPuntos(users[u].getEquipo_fantasia().getPuntos() + puntos);
		GeneralDAO.guardarUltimosPuntajes(users[u]);
	    }
            GeneralDAO.cerrarFecha(FechaDAO.fechaActual());
	}

}